package com.suning.framework.es;

import com.suning.framework.utils.XmlUtils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 〈一句话功能简述〉<br>
 * 〈功能详细描述〉
 *
 * @author 16080951(林健)
 * @Copyright (c) 2016 苏宁软件技术有限公司 版权所有
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public class EsConfig {

    //用来保存配置集合。
    /**
     * key:nameSpace
     * value Map<jsonId,EsQueryConfig>
     */
    public static Map<String, Map<String,EsQueryConfig>> CONFIGS = new HashMap<String, Map<String,EsQueryConfig>>();

    /**
     * 加载配置。(包含定时同步功能)
     */
    public void init(){
        SAXReader sr = new SAXReader();//获取读取xml的对象。
        try {
            synchronized (CONFIGS){

                //查找所有的文件
                PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
                //加载所有的esMap文件
                Resource[] mapperLocations = resolver.getResources("classpath*:config/**/*-EsMap.xml");

                for (Resource resource : mapperLocations) {
                    Document doc = sr.read(resource.getInputStream());
                    Element el_root = doc.getRootElement();//向外取数据，获取xml的根节点。
                    String namespace = el_root.attributeValue("namespace");
                    Iterator<Element> jsonList = el_root.elementIterator("json");
                    Map<String, EsQueryConfig> fileInfo = new HashMap<String, EsQueryConfig>();
                    while (jsonList.hasNext()) {
                        Element jsonObj = jsonList.next();
                        EsQueryConfig baseBean = (EsQueryConfig) XmlUtils.fromXmlToBean(jsonObj, EsQueryConfig.class);
                        fileInfo.put(baseBean.getId(), baseBean);
                    }

                    CONFIGS.put(namespace, fileInfo);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 返回jsonQueryString信息
     * @param jsonId
     * @return
     */
    public static EsQueryConfig getEsQueryConfig(String jsonId) {
        String[] nameSpaceAndJsonId = jsonId.split("\\.");
        return CONFIGS.get(nameSpaceAndJsonId[0]).get(nameSpaceAndJsonId[1]);
    }

}
